/***********************************************************************************
 @file    从机 执行命令文件
 @author
 @attention
 ***********************************************************************************/
#include "slave_perform.h"
/***********************************************************************************
@param
***********************************************************************************/

/***********************************************************************************
 * @brief  消音
***********************************************************************************/
void perform_mute(void)
{
//    uint8_t mute_flag;
}
/***********************************************************************************
 * @brief  编址
***********************************************************************************/
uint8_t perform_set_df_addr(uint16_t data)
{
    if(data>128)
        return 0;
    system_data.myaddress = data;  
    data_save();
    return 1;
}
/***********************************************************************************
 * @brief  单位 menu_good;
***********************************************************************************/
uint8_t perform_set_unit(uint16_t data)
{
    if(data>0&&data<10)
    {
        system_data.unit = data;  
        data_save();
        return 1;
    }else{
        return 0;    
    }
}
/***********************************************************************************
 * @brief  精度
***********************************************************************************/
uint8_t perform_set_precision(uint16_t data)
{
    if(data>=0&&data<=2)
    {
        switch(data)//精度选择
        {
            case 1:   system_data.precision=10;  break;
            case 2:   system_data.precision=100; break;
            default:  system_data.precision=1;   break;
        }                   
        data_save();
        return 1;  
    }else
    {    
        return 0; 
    }
}
/***********************************************************************************
 * @brief  设置预热
***********************************************************************************/
uint8_t perform_set_preheat(uint16_t data)
{
    if(data>=10&&data<=100)
    {
        system_data.preheating_time=data;
        data_save();
        return 1;  
    }
    else
    {    
        return 0;  
    }    
}
/***********************************************************************************
 * @brief  设置范围
***********************************************************************************/
uint8_t perform_set_range(uint16_t data)
{
    if(data>=0&&data<=4095)
    {
        system_data.range_ability=data;
        data_save();
        return 1;   
    }
    else
    {    
        return 0;  
    }    
}
/***********************************************************************************
* @brief  设置名称
***********************************************************************************/
uint8_t perform_set_gas_name(uint16_t data)
{
    if(data>=0&&data<=128)
    {
        system_data.gastype=data;
        data_save();
        return 1;
    }
    else
    {    
        return 0;  
    }
}
/***********************************************************************************
** @brief  校零
** @note   2脚的氧气传感器 校零时不能大于100(12位AD)
***********************************************************************************/
uint8_t perform_zero(void)
{
    system_data.zero=adcdata+10;
    data_save();
    return 1;     
}
/***********************************************************************************
 * @brief  设置低报
***********************************************************************************/
uint8_t perform_set_low_alarm(uint8_t data)
{
    if(data>5 && data<system_data.high_alarm)
    {
        system_data.low_alarm= data;
        data_save();
        return 1;
    }
    else
    {
        return 0;
    }
}
/***********************************************************************************
 * @brief  设置高报
***********************************************************************************/
uint8_t perform_set_high_alarm(uint8_t data)
{
    if(data>system_data.high_alarm && system_data.range_ability)
    {
        system_data.high_alarm = data;
        data_save();
        return 1;
    }
    else
    {
        return 0;
    }
}
/***********************************************************************************
 * @brief  重新初始化/恢复出厂设置
***********************************************************************************/
uint8_t perform_0689(void)
{
    data_save_init();     
    return 1;
}
/***********************************************************************************
 * @brief 执行6969标定 
***********************************************************************************/
uint8_t perform_6969(void)
{
    system_data.zero=adcdata+10;
    system_data.kuadu[0]=40;
    system_data.adc[0]=system_data.zero+500;//600
    data_save();
    return 1;
}
/***********************************************************************************
 * @brief 执行6868标定 
***********************************************************************************/
uint8_t perform_6868(void)
{
    system_data.zero=adcdata+10;
    system_data.kuadu[0]=40;
    system_data.adc[0]=system_data.zero+300;
    data_save();
    return 1;
}
/***********************************************************************************
 * @brief 执行6767标定 
***********************************************************************************/
uint8_t perform_6767(void)
{
    system_data.zero=adcdata+10;
    system_data.kuadu[0]=40;
    system_data.adc[0]=system_data.zero+150;
    data_save();
    return 1;
}
/***********************************************************************************
** @brief  标定跨度一 PAGE_SET_CAL
** @note   2脚氧气传感器 标定跨度大于20时，AD值不能小于800    temporary_value_u16 = system_data.kuadu[0];
***********************************************************************************/
uint8_t perform_2288(uint16_t kuadu1) 
{
    uint8_t res;
    bool is_positive      = (system_data.negative == 0);
    bool is_adc_condition = is_positive ? (adcdata > system_data.zero) : (adcdata < system_data.zero);
//    dis_dialog(is_success ? PAGE_DIS_GOOD : PAGE_DIS_FAIL, PAGE_DIS_MAIN, 50);
    if (!is_adc_condition || system_data.kuadu[0] <= 0) 
    {
        return 0;
    }
    
//    if(dev_sensor_obj.mode == SENSOR_O2)
//    {
//        if(kuadu1>20 && adcdata<800)
//        {
//            return 0;
//        }       
//    }    

    system_data.adc[0] = adcdata;
    system_data.kuadu[0] = kuadu1;

    
    if (system_data.kuadu[1] && kuadu1 < system_data.kuadu[1])// system_data.kuadu[1]存在且kuadu1 < system_data.kuadu[1] 
    {
        bool extra_condition = is_positive ? (system_data.adc[1] > adcdata) : (system_data.adc[1] < adcdata);
        if (!extra_condition) 
        {
            return 0;
        }
        res = 1;        
    } 
    else if (system_data.kuadu[1])// system_data.kuadu[1] 存在但 kuadu1 >= system_data.kuadu[1] 
    {
        system_data.kuadu[1] = 0;
        system_data.kuadu[2] = 0;
        res = 1;
    } 
    else //system_data.kuadu[1] 不存在
    {
        res = 1;
    }
    //储存处理
    if(res == 1)
    {
        #if defined(BOARD_TYPE)&&(BOARD_TYPE==BOARD_UPPER)
        modbus_jump_status(MODBUS_EVENT_WRITE,2); 
        #else
        data_save();
        #endif      
        return 1;
    }
    else
    {
        return 0;
    }    
}